package com.polaris.live.im.sfs.bean.live

import android.os.Parcelable
import com.polaris.live.common.util.JsonUtils
import com.polaris.live.im.sfs.bean.live.ext.UserBasicVo
import com.polaris.live.resp.back_resp.CallModelResp
import com.polaris.live.resp.back_resp.CallVo
import kotlinx.parcelize.IgnoredOnParcel

/**
 * 通话 信令 全是通过这个类型来穿过来的
 *
 * @author Created by 半仙 on 2023/9/8/008 13:56
 */
@kotlinx.parcelize.Parcelize
data class CallSignalingMessage(
    /**
     * 消息唯一id
     */
    override val msgId: String,
    /**
     * 通话id
     */
    override val callId: Long,
    /**
     * 对方用户id
     */
    val sender: Long,
    /**
     * 用户靓号
     */
    val senderNumber: Long,
    /**
     * 用户性别
     */
    val sex: Int,
    /**
     * 用户头像
     */
    val avatar: String,
    /**
     * 用户昵称
     */
    val nickname: String,
    /**
     * 用户生日
     */
    val birthday: Long? = null,
    /**
     * 用户魅力值
     */
    val charms: Long,
    /**
     * 用户豪气值
     */
    val richs: Long,
    /**
     * 创建时间
     */
    val createTime: Long? = null,
    /**
     * 用户背景
     */
    val cover: String? = null,
    /**
     * 语言
     */
    val language: String? = null,
    /**
     * 用户国家
     */
    val country: String? = null,
    /**
     * 头像框
     */
    val avatarFrame: String? = null,
    /**
     * 勋章
     */
    val medal: String? = null,
    /**
     * 第一分钟收益
     */
    var earnings: Long? = null,
    /**
     * 额外参数 json
     */
    val ext: String? = null,
    /**
     * 用户当前的vip等级
     */
    val vipLevel: Long? = null,
    /**
     * 昵称颜色
     */
    val nicknameColor: String? = null,
) : AbstractCallMessage, Parcelable {

    @Transient
    @IgnoredOnParcel
    private var _call: CallVo? = null

    /**
     * 获取通话信息
     */
    fun getCallVo(): CallVo? {
        return _call ?: ext?.let { e ->
            JsonUtils.fromJson<CallModelResp>(e)?.let { resp ->
                resp.callVo.apply {
                    _call = this
                }
            }
        }
    }
}

/**
 * 这个方法转换出来的数据只能用于显示
 */
fun CallSignalingMessage.toUserBasic(): UserBasicVo {
    return UserBasicVo(
        sender,
        senderNumber,
        sex,
        avatar,
        nickname,
        birthday,
        createTime ?: -1L,
        1,
        null,
        null,
        null,
        null,
        null,
        avatarFrame,
        richs,
        charms,
        language,
        country,
        null,
        official = 0L,
        vipLevel = vipLevel,
        nicknameColor = nicknameColor
    )
}